<template>
  <div class="app_wrap">
    <v-kras-markdown
      :options="options"
      @codeBoxCopySuccess="codeBoxCopySuccess"
    />
  </div>
</template>

<script>
import { defineComponent } from "vue";
export default defineComponent({
  name: "App",
});
</script>
<script setup>
import { message } from "ant-design-vue";

const options = {
  // 类型 'md'-md文件,'html_content'-html内容
  type: "html_content",
  // 标题
  title: "HHH",
  // md文件链接(type='md'时有效)
  mdFileUrl: "http://47.92.246.66:1112/markdown/package_flow.md",
  // html内容(type='html_content'时有效)
  htmlContent:
    "<h2>简介</h2><h3>Mongodb 是什么</h3><p>MongoDB 是一个基于分布式文件存储的数据库，官方地址 <a href=\"https://www.mongodb.com/ \" target=\"_blank\">https://www.mongodb.com/ </a></p><h3>数据库是什么</h3><p>数据库（DataBase）是按照数据结构来组织、存储和管理数据的 应用程序</p><h3>数据库的作用</h3><p>数据库的主要作用就是 管理数据 ，对数据进行 增（c）、删（d）、改（u）、查（r）</p><h3>数据库管理数据的特点</h3><p>相比于纯文件管理数据，数据库管理数据有如下特点：</p><p>1. 速度更快</p><p>2. 扩展性更强</p><p>3. 安全性更强</p><h3>为什么选择 Mongodb</h3><p>操作语法与 JavaScript 类似，容易上手，学习成本低</p><h2>核心概念</h2><p>Mongodb 中有三个重要概念需要掌握</p><p>数据库（database） 数据库是一个数据仓库，数据库服务下可以创建很多数据库，数据库中可以存</p><p>放很多集合</p><p>集合（collection） 集合类似于 JS 中的数组，在集合中可以存放很多文档</p><p>文档（document） 文档是数据库中的最小单位，类似于 JS 中的对象</p><p><img src=\"https://www.qiniu.lingchen.kim/iShot_2024-03-01_15.04.59.png\" alt=\"\" data-href=\"\" style=\"\"/></p><h2>命令行交互</h2><p>命令行交互一般是学习数据库的第一步，不过这些命令在后续用的比较少，所以大家了解即可</p><h3>数据库命令</h3><p>显示所有的数据库</p><pre><code >show dbs</code></pre><p>切换到指定的数据库，如果数据库不存在会自动创建数据库</p><pre><code >use 数据库名</code></pre><p>显示当前所在的数据库</p><pre><code >db</code></pre><p>删除当前数据库</p><pre><code >use 库名\ndb.dropDatabase()</code></pre><h3>集合命令</h3><p>1创建集合</p><pre><code >db.createCollection('集合名称')</code></pre><p>显示当前数据库中的所有集合</p><pre><code >show collections</code></pre><p>删除某个集合</p><pre><code >db.集合名.drop()</code></pre><p>重命名集合</p><pre><code >db.集合名.renameCollection('newName')</code></pre><h3>文档命令</h3><p>插入文档</p><pre><code >db.集合名.insert(文档对象);</code></pre><p>查询文档</p><pre><code >db.集合名.find(查询条件)</code></pre><p>_id 是 mongodb 自动生成的唯一编号，用来唯一标识文档</p><p>更新文档</p><pre><code >db.集合名.update(查询条件,新的文档)\ndb.集合名.update({name:'张三'},{$set:{age:19}})</code></pre><p>删除文档</p><pre><code >db.集合名.remove(查询条件)</code></pre><h2>Mongoose</h2><h3>介绍</h3><p>Mongoose 是一个对象文档模型库，官网 http://www.mongoosejs.net/</p><h3>作用</h3><p>方便使用代码操作 mongodb 数据库</p><h3>使用流程</h3><pre><code >//1. 安装 mongoose\n//2. 导入 mongoose\nconst mongoose = require('mongoose');\n//3. 连接数据库\nmongoose.connect('mongodb://127.0.0.1:27017/bilibili');\n//4. 设置连接回调\n//连接成功\nmongoose.connection.on('open', () =&gt; {\n  console.log('连接成功');\n  //5. 创建文档结构对象let BookSchema = new mongoose.Schema({\n    title: String,\n    author: String,\n    price: Number\n  });\n  //6. 创建文档模型对象let BookModel = mongoose.model('book', BookSchema);\n  //7. 插入文档\n  BookModel.create({\n    title: '西游记',\n    author: '吴承恩',\n    price: 19.9\n  }, (err, data) =&gt; {\n    if (err) throw err;\n    //输出 data 对象console.log(data);\n    //8. 断开连接\n    mongoose.disconnect();\n  });\n});\n//连接出错\nmongoose.connection.on('error', () =&gt; {\n  console.log('连接出错~~');\n})\n//连接关闭\nmongoose.connection.on('close', () =&gt; {\n  console.log('连接关闭');\n})</code></pre><h3>字段类型</h3><p>文档结构可选的常用字段类型列表</p><p>String 字符串</p><p>Number 数字</p><p>Boolean 布尔值</p><p>Array 数组，也可以使用 [] 来标识</p><p>Date 日期</p><p>Buffer Buffer 对象</p><p>Mixed 任意类型，需要使用 mongoose.Schema.Types.Mixed 指定</p><p>ObjectId 对象 ID，需要使用 mongoose.Schema.Types.ObjectId 指定</p><p>Decimal128 高精度数字，需要使用 mongoose.Schema.Types.Decimal128 指定</p><p>5.5 字段值验证</p><p>Mongoose 有一些内建验证器，可以对字段值进行验证</p><h3>必填项</h3><pre><code >title: {\n  type: String,\n  required: true // 设置必填项\n}</code></pre><p>默认值</p><pre><code >author: {\n  type: String,\n  default: '匿名' //默认值\n}</code></pre><h3>枚举值</h3><pre><code >gender: {\n  type: String,\n  enum: ['男','女'] //设置的值必须是数组中的\n}</code></pre><h3>唯一值</h3><pre><code >username: {\n  type: String,\n  unique: true\n}</code></pre><p>CURD</p><p>数据库的基本操作包括四个，增加（create），删除（delete），修改（update），查（read）</p><h3>增加</h3><p>插入一条</p><pre><code >SongModel.create({\n  title:'给我一首歌的时间',\n  author: 'Jay'\n}, function(err, data){\n  //错误console.log(err);\n  //插入后的数据对象console.log(data);\n});</code></pre><p>批量插入</p><pre><code >//1.引入mongoose\nconst mongoose = require('mongoose');\n//2.链接mongodb数据库 connect 连接\nmongoose.connect('mongodb://127.0.0.1:27017/project');\n//3.设置连接的回调\nmongoose.connection.on('open', () =&gt; {\n  //4.声明文档结构const PhoneSchema = new mongoose.Schema({\n    brand: String,\n    color: String,\n    price: Number,\n    tags: Array\n  })\n  //6.创建模型对象const PhoneModel = mongoose.model('phone', PhoneSchema);\n  PhoneModel.insertMany([\n    {\n      brand: '华为',\n      color: '灰色',\n      price: 2399,\n      tags: ['电量大', '屏幕大', '信号好']\n    },\n    {\n      brand: '小米',\n      color: '白色',\n      price: 2099,\n      tags: ['电量大', '屏幕大', '信号好']\n    }\n  ], (err, data) =&gt; {\n    if (err) throw err;\n    console.log('写入成功');\n    mongoose.connection.close();\n  })\n})</code></pre><h3>删除</h3><p>删除一条数据</p><pre><code >SongModel.deleteOne({ _id: '5dd65f32be6401035cb5b1ed' }, function (err) {\n  if (err) throw err;\n  console.log(' 删 除 成 功 '); mongoose.connection.close();\n});</code></pre><p>批量删除</p><pre><code >SongModel.deleteMany({author:'Jay'}, function(err){ if(err) throw err;\n  console.log('删除成功');\n  mongoose.connection.close();\n});</code></pre><h3>更新</h3><p>更新一条数据</p><pre><code >SongModel.updateOne({ author: 'JJ Lin' }, { author: '林俊杰' }, function (err) {\n  if (err) throw err;\n  mongoose.connection.close();\n});</code></pre><p>批量更新数据</p><pre><code >SongModel.updateMany({ author: 'Leehom Wang' }, { author: '王力宏' }, function (err) {\n  if (err) throw err;\n  mongoose.connection.close();\n});</code></pre><h3>查询</h3><h3>查询一条数据</h3><pre><code >SongModel.findOne({ author: '王力宏' }, function (err, data) {\n  if (err) throw err;\n  console.log(data); mongoose.connection.close();\n});\n//根据 id 查询数据\nSongModel.findById('5dd662b5381fc316b44ce167', function (err, data) {\n  if (err) throw err;\n  console.log(data);\n  mongoose.connection.close();\n});</code></pre><p>批量查询数据</p><pre><code >//不加条件查询\nSongModel.find(function (err, data) {\n  if (err) throw err;\n  console.log(data); mongoose.connection.close();\n});\n//加条件查询\nSongModel.find({ author: '王力宏' }, function (err, data) {\n  if (err) throw err;\n  console.log(data);\n  mongoose.connection.close();\n});</code></pre><h3>条件控制</h3><p>运算符</p><p>在 mongodb 不能 &gt; &lt; &gt;= &lt;= !== 等运算符，需要使用替代符号</p><pre><code >db.students.find({id:{$gt:3}}); id号比3大的所有的记录</code></pre><p>使 用 $gt</p><p>&lt; 使 用 $lt</p><p>= 使 用 $gte</p><p>&lt;= 使 用 $lte</p><p>!== 使 用 $ne</p><h3>逻辑或的情况</h3><pre><code >db.students.find({$or:[{age:18},{age:24}]});</code></pre><h3>逻辑与的情况</h3><pre><code >db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});</code></pre><h3>正则匹配</h3><pre><code >db.students.find({name:/imissyou/});</code></pre><h3>性化读取</h3><pre><code >//0:不要的字段\n//1:要的字段\nSongModel.find().select({ _id: 0, title: 1 }).exec(function (err, data) {\n  if (err) throw err; console.log(data); mongoose.connection.close();\n});</code></pre><h3>数据排序</h3><pre><code >//sort 排序\n//1:升序\n//-1:倒序\nSongModel.find().sort({ hot: 1 }).exec(function (err, data) {\n  if (err) throw err;\n  console.log(data); mongoose.connection.close();\n});</code></pre><h3>数据截取</h3><pre><code >//skip 跳过\tlimit 限定\nSongModel.find().skip(10).limit(10).exec(function (err, data) {\n  if (err) throw err; console.log(data); mongoose.connection.close();\n});</code></pre><p><br></p><p><br></p><p><br></p>",
};

const codeBoxCopySuccess = () => {
  message.success("复制成功!");
};
</script>

<style lang="scss" scoped></style>
